package com.cskaoyan.service.admin;

import com.cskaoyan.bean.MarketCoupon;
import com.cskaoyan.bean.MarketCouponUser;
import com.cskaoyan.bean.common.BasePageInfo;
import com.cskaoyan.bean.common.CommonData;
import com.cskaoyan.bean.vo.wx.coupon.WxUserCouponVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author by yxy_8175@163.com
 * @Description TODO
 * @Date 2022-11-19 20:29
 */

public interface CouponService {

    CommonData<MarketCoupon> selectByPage(BasePageInfo info,String name,Integer type,Integer status);

    MarketCoupon queryCouponInfoById(Integer id);

    MarketCoupon createCoupon(MarketCoupon marketCoupon);

    MarketCoupon updateCouponInfo(MarketCoupon coupon);

    int deleteCoupon(MarketCoupon coupon);

    /*
     * @Description 在优惠券管理中查询已经获得该优惠券的用户的相关信息
     * @param userId 用户主键id  pageInfo 页面信息  couponId 优惠券id status 状态
     * @return
     * @date 2022-11-22 10:39
     * @auther yxy_8175@163.com
     */
    CommonData queryUserFromCoupon(BasePageInfo info, Integer couponId,Integer userId,Integer status);

    /*
     * @Description 查询用户已经获得的所有优惠券
     * @param userId 用户主键id  pageInfo 页面信息  couponId 优惠券id status 状态
     * @return
     * @date 2022-11-22 10:39
     * @auther yxy_8175@163.com
     */
    CommonData<WxUserCouponVo> queryCouponByUserId(BasePageInfo pageInfo, Integer uid, Integer status);

    /*
     * @Description 查询是否具有额度来获取优惠券
     * @param
     * @return
     * @date 2022-11-22 11:42
     * @auther yxy_8175@163.com
    */
    boolean queryHaveQuota(Integer userId, Integer couponId);

    /*
     * @Description 用户获取优惠券，将信息添加至 market_coupon_user表中
     * @param
     * @return
     * @date 2022-11-22 14:29
     * @auther yxy_8175@163.com
    */
    boolean receiveCouponForUser(Integer userId,Integer couponId);


    /*
     * @Description 根据用户id 查询优惠券-用户表中所有数据
     * @param
     * @return
     * @date 2022-11-22 16:21
     * @auther yxy_8175@163.com
    */
    CommonData<WxUserCouponVo> queryAll(Integer userId,BigDecimal checkedPrice);

    /*
     * @Description 检查优惠券是否符合使用条件
     * @param
     * @return
     * @date 2022-11-22 19:12
     * @auther yxy_8175@163.com
    */
    void checkCoupon(WxUserCouponVo couponVo, BigDecimal checkedPrice);

    /*
     * @Description 通过兑换码来获取
     * @param
     * @return
     * @date 2022-11-22 20:29
     * @auther yxy_8175@163.com
    */
    Short exchangeCouponByCDK(Integer userId,String code);

    /*
     * @Description TODO 给新人发放优惠券
     * @param userId 用户id
     * @return
     * @date 2022-11-25 0:34
     * @auther yxy_8175@163.com
    */
    void ProvideCoupon(Integer userId);
}
